<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\User;
use App\Models\UserInfos;
use App\Services\JwtToken;
use App\Services\Sms;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;

class LoginController extends Controller
{
    /**
     * 发送验证码接口
     * @param Request $request
     * @return array|void
     */
    public function sendSms(Request $request){
        $phone = $request->post('phone');
        // 生成随机数验证码
        $code = rand(1000,9999);
        // 判断用户是否注册
        $user = UserInfos::where('phone',$phone)->first();
        if (empty($user)){
            return ['code'=>201,'msg'=>'用户不存在，请先注册','data'=>''];
        }
        // 判断是否频繁发送
        if (Cache::get("$phone".'time')){
            return ['code'=>201,'msg'=>'一分钟后重试','data'=>''];
        }
        // 判断发送次数
//        if (Cache::get("$phone".'num')){
//            if (Cache::get("$phone".'num')>=3){
//                return ['code'=>201,'msg'=>'今天次数用完，明天再试','data'=>''];
//            }
//            // 存在  自增一
//          Cache::increment("$phone".'num');
//        }else{
//            Cache::set("$phone".'num','1',60*60*24);
//        }
        //发送短信
        $res = Sms::send($phone,$code);
        // 返回值30 短信发送成功
        if ($res==30){
            // 缓存短信验证码  五分钟有效期
            Cache::set("$phone".'code',$code,60*5);
            // 缓存发送验证码时间
            Cache::set("$phone".'time',time(),60);
            return ['code'=>200,'msg'=>'发送成功','data'=>$code];
        }
    }

    /**
     * 登录
     * @param Request $request
     * @return array
     */
    public function login(Request $request){
        // 前端传来手机号  验证码
        $phone = $request->post('phone');
        $sms = $request->post('sms');
        $user = UserInfos::where('phone',$phone)->first()->toArray();
        if (empty($user)){
            return ['code'=>201,'msg'=>'用户不存在，请先注册','data'=>''];
        }
        // 从缓存中取出验证码
        $code = Cache::get("$phone".'code');
        if ($code!=$sms){
            return  ['code'=>201,'msg'=>'验证码有误','data'=>''];
        }
        if (!$code){
          return  ['code'=>201,'msg'=>'请先发送验证码','data'=>''];
        }
        $token = JwtToken::createToken($phone);
        return  ['code'=>200,'msg'=>'success','data'=>$token,'username'=>$user['username'],'id'=>$user['id']];
    }
}
